﻿#ifndef EDGEFINDER_H
#define EDGEFINDER_H
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

// MEASURE_DIR 表示当前测点是测量横向距离还是竖向距离。还有寻边的方向
enum MEASURE_DIR {TOP_BOTTOM, BOTTOM_TOP, LEFT_RIGHT, RIGHT_LEFT};

// MEASURE_PATTERN 表示寻边时的依据的特征
enum MEASURE_PATTERN{WHITE_BLACK, BLACK_WHITE, BOTH};

class EdgeFinder
{
public:
    EdgeFinder();
    /**
     * @brief edge 在图像中提取边缘。寻找的方向由 setDirPattern() 函数决定。
     * @param gray 传入的图像是 8bit 灰度图。
     * @return
     */
    std::vector<cv::Point2i> edge(cv::Mat gray);

    /**
     * @brief distance 计算特征边位于第几行（TOP_BOTTOM, BOTTOM_TOP）或者第几列（LEFT_RIGHT, RIGHT_LEFT）
     * @param gray
     * @return 如果出现错误，则返回 -1
     */
    int distance(cv::Mat gray);


    void setDirPattern(enum MEASURE_DIR dir, enum MEASURE_PATTERN pat);
private:
    enum MEASURE_DIR m_dir = TOP_BOTTOM;
    enum MEASURE_PATTERN m_pattern = WHITE_BLACK;
};



#endif // EDGEFINDER_H
